#include "BulletSoftBody/btDeformableMultiBodyDynamicsWorld.h"
#ifdef __cplusplus
extern "C" {
#endif
btDeformableMultiBodyDynamicsWorld::btDeformableSingleRayCallback* bullet_NewbtDeformableMultiBodyDynamicsWorldbtDeformableSingleRayCallback(btVector3* rayFromWorld,btVector3* rayToWorld,btDeformableMultiBodyDynamicsWorld* world,btCollisionWorld::RayResultCallback* resultCallback){
	btVector3 const& c_arg_rayFromWorld=(btVector3 const&)(*rayFromWorld);
	btVector3 const& c_arg_rayToWorld=(btVector3 const&)(*rayToWorld);
	btDeformableMultiBodyDynamicsWorld const * c_arg_world=(btDeformableMultiBodyDynamicsWorld const *)(void*)(world);
	btCollisionWorld::RayResultCallback& c_arg_resultCallback=(btCollisionWorld::RayResultCallback&)(*resultCallback);
	btDeformableMultiBodyDynamicsWorld::btDeformableSingleRayCallback* wrap_out = new btDeformableMultiBodyDynamicsWorld::btDeformableSingleRayCallback(c_arg_rayFromWorld,c_arg_rayToWorld,c_arg_world,c_arg_resultCallback);
	return wrap_out;
}

btVector3* bullet_btDeformableMultiBodyDynamicsWorldbtDeformableSingleRayCallback_GetFieldOfM_hitNormal(btDeformableMultiBodyDynamicsWorld::btDeformableSingleRayCallback* c_this){
	return (btVector3*)(&c_this->m_hitNormal);
}

btTransform* bullet_btDeformableMultiBodyDynamicsWorldbtDeformableSingleRayCallback_GetFieldOfM_rayFromTrans(btDeformableMultiBodyDynamicsWorld::btDeformableSingleRayCallback* c_this){
	return (btTransform*)(&c_this->m_rayFromTrans);
}

btVector3* bullet_btDeformableMultiBodyDynamicsWorldbtDeformableSingleRayCallback_GetFieldOfM_rayFromWorld(btDeformableMultiBodyDynamicsWorld::btDeformableSingleRayCallback* c_this){
	return (btVector3*)(&c_this->m_rayFromWorld);
}

btTransform* bullet_btDeformableMultiBodyDynamicsWorldbtDeformableSingleRayCallback_GetFieldOfM_rayToTrans(btDeformableMultiBodyDynamicsWorld::btDeformableSingleRayCallback* c_this){
	return (btTransform*)(&c_this->m_rayToTrans);
}

btVector3* bullet_btDeformableMultiBodyDynamicsWorldbtDeformableSingleRayCallback_GetFieldOfM_rayToWorld(btDeformableMultiBodyDynamicsWorld::btDeformableSingleRayCallback* c_this){
	return (btVector3*)(&c_this->m_rayToWorld);
}

btDeformableMultiBodyDynamicsWorld* bullet_NewbtDeformableMultiBodyDynamicsWorld(btDispatcher* dispatcher,btBroadphaseInterface* pairCache,btDeformableMultiBodyConstraintSolver* constraintSolver,btCollisionConfiguration* collisionConfiguration,btDeformableBodySolver* deformableBodySolver){
	btDispatcher * c_arg_dispatcher=(btDispatcher *)(void*)(dispatcher);
	btBroadphaseInterface * c_arg_pairCache=(btBroadphaseInterface *)(void*)(pairCache);
	btDeformableMultiBodyConstraintSolver * c_arg_constraintSolver=(btDeformableMultiBodyConstraintSolver *)(void*)(constraintSolver);
	btCollisionConfiguration * c_arg_collisionConfiguration=(btCollisionConfiguration *)(void*)(collisionConfiguration);
	btDeformableBodySolver * c_arg_deformableBodySolver=(btDeformableBodySolver *)(void*)(deformableBodySolver);
	btDeformableMultiBodyDynamicsWorld* wrap_out = new btDeformableMultiBodyDynamicsWorld(c_arg_dispatcher,c_arg_pairCache,c_arg_constraintSolver,c_arg_collisionConfiguration,c_arg_deformableBodySolver);
	return wrap_out;
}

void bullet_btDeformableMultiBodyDynamicsWorld_addForce(btDeformableMultiBodyDynamicsWorld* c_this,btSoftBody* psb,btDeformableLagrangianForce* force){
	btSoftBody * c_arg_psb=(btSoftBody *)(void*)(psb);
	btDeformableLagrangianForce * c_arg_force=(btDeformableLagrangianForce *)(void*)(force);
	c_this->addForce(c_arg_psb,c_arg_force);
}

void bullet_btDeformableMultiBodyDynamicsWorld_afterSolverCallbacks(btDeformableMultiBodyDynamicsWorld* c_this,double timeStep){
	btScalar c_arg_timeStep=timeStep;
	c_this->afterSolverCallbacks(c_arg_timeStep);
}

void bullet_btDeformableMultiBodyDynamicsWorld_applyRepulsionForce(btDeformableMultiBodyDynamicsWorld* c_this,double timeStep){
	btScalar c_arg_timeStep=timeStep;
	c_this->applyRepulsionForce(c_arg_timeStep);
}

void bullet_btDeformableMultiBodyDynamicsWorld_applyRigidBodyGravity(btDeformableMultiBodyDynamicsWorld* c_this,double timeStep){
	btScalar c_arg_timeStep=timeStep;
	c_this->applyRigidBodyGravity(c_arg_timeStep);
}

void bullet_btDeformableMultiBodyDynamicsWorld_beforeSolverCallbacks(btDeformableMultiBodyDynamicsWorld* c_this,double timeStep){
	btScalar c_arg_timeStep=timeStep;
	c_this->beforeSolverCallbacks(c_arg_timeStep);
}

int bullet_btDeformableMultiBodyDynamicsWorld_getDrawFlags(btDeformableMultiBodyDynamicsWorld* c_this){
	int c_out = c_this->getDrawFlags();
	int wrap_out = (c_out);
	return wrap_out;
}

btSoftBodyWorldInfo* bullet_btDeformableMultiBodyDynamicsWorld_getWorldInfo(btDeformableMultiBodyDynamicsWorld* c_this){
	btSoftBodyWorldInfo& c_out = c_this->getWorldInfo();
	btSoftBodyWorldInfo* wrap_out = (btSoftBodyWorldInfo*)(&c_out);
	return wrap_out;
}

btSoftBodyWorldInfo* bullet_btDeformableMultiBodyDynamicsWorld_getWorldInfo1(btDeformableMultiBodyDynamicsWorld* c_this){
	btSoftBodyWorldInfo const& c_out = c_this->getWorldInfo();
	btSoftBodyWorldInfo* wrap_out = (btSoftBodyWorldInfo*)(&c_out);
	return wrap_out;
}

void bullet_btDeformableMultiBodyDynamicsWorld_performDeformableCollisionDetection(btDeformableMultiBodyDynamicsWorld* c_this){
	c_this->performDeformableCollisionDetection();
}

void bullet_btDeformableMultiBodyDynamicsWorld_performGeometricCollisions(btDeformableMultiBodyDynamicsWorld* c_this,double timeStep){
	btScalar c_arg_timeStep=timeStep;
	c_this->performGeometricCollisions(c_arg_timeStep);
}

void bullet_btDeformableMultiBodyDynamicsWorld_rayTestSingle(btDeformableMultiBodyDynamicsWorld* c_this,btTransform* rayFromTrans,btTransform* rayToTrans,btCollisionObject* collisionObject,btCollisionShape* collisionShape,btTransform* colObjWorldTransform,btCollisionWorld::RayResultCallback* resultCallback){
	btTransform const& c_arg_rayFromTrans=(btTransform const&)(*rayFromTrans);
	btTransform const& c_arg_rayToTrans=(btTransform const&)(*rayToTrans);
	btCollisionObject * c_arg_collisionObject=(btCollisionObject *)(void*)(collisionObject);
	btCollisionShape const * c_arg_collisionShape=(btCollisionShape const *)(void*)(collisionShape);
	btTransform const& c_arg_colObjWorldTransform=(btTransform const&)(*colObjWorldTransform);
	btCollisionWorld::RayResultCallback& c_arg_resultCallback=(btCollisionWorld::RayResultCallback&)(*resultCallback);
	c_this->rayTestSingle(c_arg_rayFromTrans,c_arg_rayToTrans,c_arg_collisionObject,c_arg_collisionShape,c_arg_colObjWorldTransform,c_arg_resultCallback);
}

void bullet_btDeformableMultiBodyDynamicsWorld_reinitialize(btDeformableMultiBodyDynamicsWorld* c_this,double timeStep){
	btScalar c_arg_timeStep=timeStep;
	c_this->reinitialize(c_arg_timeStep);
}

void bullet_btDeformableMultiBodyDynamicsWorld_removeForce(btDeformableMultiBodyDynamicsWorld* c_this,btSoftBody* psb,btDeformableLagrangianForce* force){
	btSoftBody * c_arg_psb=(btSoftBody *)(void*)(psb);
	btDeformableLagrangianForce * c_arg_force=(btDeformableLagrangianForce *)(void*)(force);
	c_this->removeForce(c_arg_psb,c_arg_force);
}

void bullet_btDeformableMultiBodyDynamicsWorld_removeSoftBody(btDeformableMultiBodyDynamicsWorld* c_this,btSoftBody* body){
	btSoftBody * c_arg_body=(btSoftBody *)(void*)(body);
	c_this->removeSoftBody(c_arg_body);
}

void bullet_btDeformableMultiBodyDynamicsWorld_removeSoftBodyForce(btDeformableMultiBodyDynamicsWorld* c_this,btSoftBody* psb){
	btSoftBody * c_arg_psb=(btSoftBody *)(void*)(psb);
	c_this->removeSoftBodyForce(c_arg_psb);
}

void bullet_btDeformableMultiBodyDynamicsWorld_setDrawFlags(btDeformableMultiBodyDynamicsWorld* c_this,int f){
	int c_arg_f=f;
	c_this->setDrawFlags(c_arg_f);
}

void bullet_btDeformableMultiBodyDynamicsWorld_setImplicit(btDeformableMultiBodyDynamicsWorld* c_this,bool implicit){
	bool c_arg_implicit=implicit;
	c_this->setImplicit(c_arg_implicit);
}

void bullet_btDeformableMultiBodyDynamicsWorld_setLineSearch(btDeformableMultiBodyDynamicsWorld* c_this,bool lineSearch){
	bool c_arg_lineSearch=lineSearch;
	c_this->setLineSearch(c_arg_lineSearch);
}

void bullet_btDeformableMultiBodyDynamicsWorld_setupConstraints(btDeformableMultiBodyDynamicsWorld* c_this){
	c_this->setupConstraints();
}

void bullet_btDeformableMultiBodyDynamicsWorld_setUseProjection(btDeformableMultiBodyDynamicsWorld* c_this,bool useProjection){
	bool c_arg_useProjection=useProjection;
	c_this->setUseProjection(c_arg_useProjection);
}

void bullet_btDeformableMultiBodyDynamicsWorld_softBodySelfCollision(btDeformableMultiBodyDynamicsWorld* c_this){
	c_this->softBodySelfCollision();
}

void bullet_btDeformableMultiBodyDynamicsWorld_solveContactConstraints(btDeformableMultiBodyDynamicsWorld* c_this){
	c_this->solveContactConstraints();
}

void bullet_btDeformableMultiBodyDynamicsWorld_sortConstraints(btDeformableMultiBodyDynamicsWorld* c_this){
	c_this->sortConstraints();
}

#ifdef __cplusplus
}
#endif
